home *** CD-ROM | disk | FTP | other *** search
/ The World of Computer Software / The World of Computer Software.iso / ply15dat.zip / ROBWAFER.INC < prev    next >
Text File  |  1992-10-12  |  7KB  |  170 lines

  1. define wafer_height 0.4
  2.  
  3. define wafer0_width peg_base_width/1.1
  4. define wafer1_width wafer0_width * 0.8
  5. define wafer2_width wafer1_width * 0.8
  6.  
  7. define wafer0
  8. object {
  9.     object { disc <0, 0,   0>, <0, -1, 0>, peg_width, wafer0_width }
  10.   + object { disc <0, wafer_height, 0>, <0,  1, 0>, peg_width, wafer0_width }
  11.   + object { cylinder <0, 0, 0>, <0, wafer_height, 0>, wafer0_width }
  12.   + object { cylinder <0, 0, 0>, <0, wafer_height, 0>, peg_width }
  13.   jade
  14.   }
  15.  
  16. define wafer1
  17. object {
  18.     object { disc <0, 0,   0>, <0, -1, 0>, peg_width, wafer1_width }
  19.   + object { disc <0, wafer_height, 0>, <0,  1, 0>, peg_width, wafer1_width }
  20.   + object { cylinder <0, 0, 0>, <0, wafer_height, 0>, wafer1_width }
  21.   + object { cylinder <0, 0, 0>, <0, wafer_height, 0>, peg_width }
  22.   jade { translate <30, 30, 30> }
  23.   }
  24.  
  25. define wafer2
  26. object {
  27.     object { disc <0, 0,   0>, <0, -1, 0>, peg_width, wafer2_width }
  28.   + object { disc <0, wafer_height, 0>, <0,  1, 0>, peg_width, wafer2_width }
  29.   + object { cylinder <0, 0, 0>, <0, wafer_height, 0>, wafer2_width }
  30.   + object { cylinder <0, 0, 0>, <0, wafer_height, 0>, peg_width }
  31.   jade { translate <20, 17, 20> }
  32.   }
  33.  
  34. // Which wafer are we working on this move?
  35. define working_wafer [2, 1, 2, 0, 2, 1, 2, 2]
  36.  
  37. // Define how high the wafer is when starting the move
  38. // and when ending the move
  39. define wafer_positions [[[-1, 0], [-1, 1], [-1, 2]],
  40.                         [[-1, 0], [-1, 1], [ 0, 0]],
  41.                         [[-1, 0], [ 1, 0], [ 0, 0]],
  42.                         [[-1, 0], [ 1, 0], [ 1, 1]],
  43.                         [[ 0, 0], [ 1, 0], [ 1, 1]],
  44.                         [[ 0, 0], [ 1, 0], [-1, 0]],
  45.                         [[ 0, 0], [ 0, 1], [-1, 0]],
  46.                         [[ 0, 0], [ 0, 1], [ 0, 2]]]
  47.  
  48. if (submove == 0) {
  49.    // We are moving the wafer from the start position, straight up
  50.    define moving_wafer_height
  51.       peg_base_height +
  52.       (1 - submove_increment) * wafer_height * 
  53.          wafer_positions[move][working_wafer[move]][1] +
  54.       submove_increment * peg_length * 1.1
  55.    define moving_wafer_offset
  56.       peg_offset * wafer_positions[move][working_wafer[move]][0]
  57.    }
  58. else if (submove == 1) {
  59.    // We are moving the wafer from the start peg over to the next peg
  60.    define moving_wafer_height peg_base_height + peg_length * 1.1
  61.    define moving_wafer_offset
  62.       peg_offset *
  63.          ((1 - submove_increment) *
  64.                     wafer_positions[move][working_wafer[move]][0] +
  65.           submove_increment * wafer_positions[move+1][working_wafer[move]][0])
  66.    }
  67. else if (submove == 2) {
  68.    // We are moving the wafer from the top of the end peg straight down
  69.    define moving_wafer_height
  70.       peg_base_height +
  71.       submove_increment * wafer_height *
  72.          wafer_positions[move+1][working_wafer[move]][1] +
  73.       (1 - submove_increment) * peg_length * 1.1
  74.    define moving_wafer_offset
  75.       peg_offset * wafer_positions[move+1][working_wafer[move]][0]
  76.    }
  77. else if (submove == 3) {
  78.    // We are moving only the arm from the end position, straight up
  79.    define moving_wafer_height
  80.       peg_base_height +
  81.       (1 - submove_increment) * wafer_height * 
  82.          wafer_positions[move+1][working_wafer[move]][1] +
  83.       submove_increment * peg_length * 1.1
  84.    define moving_wafer_offset
  85.       peg_offset * wafer_positions[move+1][working_wafer[move]][0]
  86.    }
  87. else if (submove == 4) {
  88.    // We are moving only the arm from the end peg over to the new start peg
  89.    define moving_wafer_height peg_base_height + peg_length * 1.1
  90.    define moving_wafer_offset
  91.       peg_offset *
  92.          ((1 - submove_increment) *
  93.                     wafer_positions[move+1][working_wafer[move]][0] +
  94.           submove_increment * wafer_positions[move][working_wafer[move+1]][0])
  95.    }
  96. else if (submove == 5) {
  97.    // We are moving only the arm from the top of the new start peg straight down
  98.    define moving_wafer_height
  99.       peg_base_height +
  100.       submove_increment * wafer_height *
  101.          wafer_positions[move][working_wafer[move+1]][1] +
  102.       (1 - submove_increment) * peg_length * 1.1
  103.    define moving_wafer_offset
  104.       peg_offset * wafer_positions[move][working_wafer[move+1]][0]
  105.    }
  106.  
  107. define which_wafer_width0 ((working_wafer[move] == 0) ? wafer0_width :
  108.                ((working_wafer[move] == 1) ? wafer1_width :
  109.                 wafer2_width))
  110. define which_wafer_width1 ((working_wafer[move+1] == 0) ? wafer0_width :
  111.                ((working_wafer[move+1] == 1) ? wafer1_width :
  112.                 wafer2_width))
  113.  
  114. if (submove < 3)
  115.    define wafer_width which_wafer_width0
  116. else
  117.    define wafer_width which_wafer_width1
  118.  
  119. if (working_wafer[move] == 0) {
  120.    if (submove < 3) {
  121.       define wafer_height0 moving_wafer_height
  122.       define wafer_offset0 moving_wafer_offset
  123.       }
  124.    else {
  125.       define wafer_height0 peg_base_height +
  126.                wafer_height * wafer_positions[move+1][0][1]
  127.       define wafer_offset0 peg_offset * wafer_positions[move+1][0][0]
  128.       }
  129.    define wafer_height1 peg_base_height +
  130.                         wafer_height * wafer_positions[move][1][1]
  131.    define wafer_offset1 peg_offset * wafer_positions[move][1][0]
  132.    define wafer_height2 peg_base_height +
  133.                         wafer_height * wafer_positions[move][2][1]
  134.    define wafer_offset2 peg_offset * wafer_positions[move][2][0]
  135.    }
  136. else if (working_wafer[move] == 1) {
  137.    define wafer_height0 peg_base_height +
  138.                         wafer_height * wafer_positions[move][0][1]
  139.    define wafer_offset0 peg_offset * wafer_positions[move][0][0]
  140.    if (submove < 3) {
  141.       define wafer_height1 moving_wafer_height
  142.       define wafer_offset1 moving_wafer_offset
  143.       }
  144.    else {
  145.       define wafer_height1 peg_base_height +
  146.                wafer_height * wafer_positions[move+1][1][1]
  147.       define wafer_offset1 peg_offset * wafer_positions[move+1][1][0]
  148.       }
  149.    define wafer_height2 peg_base_height +
  150.                         wafer_height * wafer_positions[move][2][1]
  151.    define wafer_offset2 peg_offset * wafer_positions[move][2][0]
  152.    }
  153. else {
  154.    define wafer_height0 peg_base_height +
  155.                         wafer_height * wafer_positions[move][0][1]
  156.    define wafer_offset0 peg_offset * wafer_positions[move][0][0]
  157.    define wafer_height1 peg_base_height +
  158.                         wafer_height * wafer_positions[move][1][1]
  159.    define wafer_offset1 peg_offset * wafer_positions[move][1][0]
  160.    if (submove < 3) {
  161.       define wafer_height2 moving_wafer_height
  162.       define wafer_offset2 moving_wafer_offset
  163.       }
  164.    else {
  165.       define wafer_height2 peg_base_height +
  166.                wafer_height * wafer_positions[move+1][2][1]
  167.       define wafer_offset2 peg_offset * wafer_positions[move+1][2][0]
  168.       }
  169.    }
  170.